#include "HeartRequest.h"
#include <cjson/cJSON.h>
#include <stdio.h>
#include "Adlogic.h"
// 回调函数，打印一下服务器相应的数据
size_t heartRespCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
    size_t realsize = size * nmemb;
    // 这里可以处理获取到的数据，比如存储到文件或者其他操作
    char *result = (char *)contents;
    // 先拿到整个json字符串
    cJSON *root = cJSON_Parse(result);
    // 判断一下是否非空
    if (root != NULL)
    {
        // 分别解析哪个字段的数据
        cJSON *successRoot = cJSON_GetObjectItemCaseSensitive(root, "success");
        if (cJSON_IsFalse(successRoot)) // 判断一下，失败
        {
            cJSON *codeRoot = cJSON_GetObjectItemCaseSensitive(root, "code");
            cJSON *messageRoot = cJSON_GetObjectItemCaseSensitive(root, "message");
            printf("获取列表失败 code=%d ,message=%s \n", codeRoot->valueint, messageRoot->valuestring);
        }
        else
        {
            // 如果成功，就解析服务器返回的内容
            cJSON *data = cJSON_GetObjectItemCaseSensitive(root, "data");
            if (data != NULL) // 如果拿到了，就进data里面拿数据
            {
                // 命令列表的解析
                cJSON *cmd_list = cJSON_GetObjectItemCaseSensitive(data, "cmd_list");
                paresCmdList(cmd_list);
                // 广告列表的解析
                cJSON *ad_list = cJSON_GetObjectItemCaseSensitive(data, "ad_list");
                paresAdList(ad_list);
            }
        }
    }

    return realsize;
}

void paresCmdList(cJSON *cmd_list)
{
    // 判断是否是list
    if (cJSON_IsArray(cmd_list))
    {
        // 获取它的长度
        int size = cJSON_GetArraySize(cmd_list);
        for (int i = 0; i < size; i++)
        {
            // 获取每个元素
            cJSON *item = cJSON_GetArrayItem(cmd_list, i);
            // 获取具体数据,跟数组一样[1,2,3]
            int cmd = item->valueint;
            switch (cmd)
            {
            case 1:

                break;
            case 2:

                break;
            case 3:

                break;
            default:
                break;
            }
        }
    }
}

/*
    ip：是动态的 （通过读取配置文件 能够获取）
    sn: 是动态   ()
    地址：动态    (通过读取配置文件 能够获取)
*/

void sendHeartRequest(gchar *gatewayIp, gchar *sn)
{
    printf("gatewayIp=%s,sn=%s\n",gatewayIp,sn);
    char * urlFormatStr="http://%s/hearts.json?sn=%s";
    //替换动态参数
    char *url = calloc(1,100);
    // 替换动态参数
    sprintf(url, gatewayIp, sn);
    printf("%s\n", url);
    // 核心调用一个发送请求的函数
    sendGetRequest(url, heartRespCallback);
}